'use strict'

Object.defineProperty(exports, '__esModule', {
  value: true
})
exports.default = getScrollBarSize
exports.getTargetScrollBarSize = getTargetScrollBarSize

/* eslint-disable no-param-reassign */
var cached

function getScrollBarSize(fresh) {
  if (typeof document === 'undefined') {
    return 0
  }

  if (fresh || cached === undefined) {
    var inner = document.createElement('div')
    inner.style.width = '100%'
    inner.style.height = '200px'
    var outer = document.createElement('div')
    var outerStyle = outer.style
    outerStyle.position = 'absolute'
    outerStyle.top = '0'
    outerStyle.left = '0'
    outerStyle.pointerEvents = 'none'
    outerStyle.visibility = 'hidden'
    outerStyle.width = '200px'
    outerStyle.height = '150px'
    outerStyle.overflow = 'hidden'
    outer.appendChild(inner)
    document.body.appendChild(outer)
    var widthContained = inner.offsetWidth
    outer.style.overflow = 'scroll'
    var widthScroll = inner.offsetWidth

    if (widthContained === widthScroll) {
      widthScroll = outer.clientWidth
    }

    document.body.removeChild(outer)
    cached = widthContained - widthScroll
  }

  return cached
}

function ensureSize(str) {
  var match = str.match(/^(.*)px$/)
  var value = Number(match === null || match === void 0 ? void 0 : match[1])
  return Number.isNaN(value) ? getScrollBarSize() : value
}

function getTargetScrollBarSize(target) {
  if (typeof document === 'undefined' || !target || !(target instanceof Element)) {
    return {
      width: 0,
      height: 0
    }
  }

  var _getComputedStyle = getComputedStyle(target, '::-webkit-scrollbar')
  var width = _getComputedStyle.width
  var height = _getComputedStyle.height

  return {
    width: ensureSize(width),
    height: ensureSize(height)
  }
}
